premake / premake-core

Premake
https://premake.github.io/
BSD 3-Clause "New" or "Revised" License
3.23k stars 621 forks source link

Premake doesn't set CC variable when generating gsys2 project files (Win10) #1640

Open SteelPh0enix opened 3 years ago

SteelPh0enix commented 3 years ago

What seems to be the problem? Premake doesn't set the CC variable with gmake and gmake2 generator when trying to build a C project

What did you expect to happen? I expected that i'll be able to build a simple Hello World with barebones premake copied from "Getting Started" guide.

What have you tried so far? I've managed to build the program after adding CC = gcc directly into generated *.make file.

How can we reproduce this?

This issue happens when you either

What version of Premake are you using? premake5 (Premake Build Script Generator) 5.0.0-alpha16

Anything else we should know? I've tested it on my personal PC and in a clean virtual machine (both machines have latest Windows 10, MinGW-w64 (x86_64, 8.1.0 and latest Premake). I was able to reproduce the issue on both machines.

SteelPh0enix commented 3 years ago

Update: i've checked if issue happens on Linux too, but on latest ZorinOS everything seems to be working fine.

samsinsane commented 3 years ago

This looks to be a duplicate of #266?

nickclark2016 commented 3 years ago

So I've had the chance to dig into this. I think it's an easy fix. This is what we currently do to get a tool:

function gcc.gettoolname(cfg, tool)
    if (cfg.gccprefix and gcc.tools[tool]) or tool == "rc" then
        return (cfg.gccprefix or "") .. gcc.tools[tool]
    end
    return nil
end

What I propose is that we change it to this:

function gcc.gettoolname(cfg, tool)
    local value = gcc.tools[tool]
    if type(value) == "function" then
        value = value(cfg)
    end
    return (cfg.gccprefix or "") .. value
end

This brings the gcc toolchain to work how the clang toolchain's gettoolname function works. So what does this mean? This means that we will always print the following block on windows when the toolchain "gcc" is specified:

  ifeq ($(origin CC), default)
    CC = gcc
  endif
  ifeq ($(origin CXX), default)
    CXX = g++
  endif
  ifeq ($(origin AR), default)
    AR = ar
  endif
  RESCOMP = windres

@samsinsane @starkos If this is desired behavior, I have this code and corresponding unit tests written up and can put in a PR.

starkos commented 3 years ago

This looks reasonable to me—thanks for looking into it!

nickclark2016 commented 3 years ago

Sounds good. Let me go ahead an put in the PR

nickclark2016 commented 2 years ago

Wow, did I never put in a PR for this? I'll add this to the top of my todo list for v5.

SteelPh0enix commented 1 year ago

hi, is this fixed already? I've noticed that this issue is still open