Opened 11 months ago

Last modified 11 months ago

#67725 accepted defect

makefile portgroup and muniversal portgroups do not work together

Reported by: ryandesign (Ryan Carsten Schmidt) Owned by: MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)
Priority: Normal Milestone:
Component: ports Version:
Keywords: Cc: mascguy (Christopher Nielsen)
Port: makefile

Description

There is code in the makefile portgroup presumably intended to make it work with the munivesal portgroups but it doesn't work for me.

I am trying to add the muniversal portgroup (either 1.0 or 1.1) to the zpaq port (which already uses the makefile 1.0 portgroup) to fix #67552. I need to add a flag to CPPFLAGS for non-Intel architectures. In addition, of course, I need correct -arch flags on all compiles and links.

Without the muniversal portgroup, correct -arch flags are used on all compiles and links.

When I add the muniversal 1.1 portgroup, then -arch flags are used on compiles but not on links. And the CPPFLAGS I've specified are not added.

Using this change to the zpaq Portfile:

  • archivers/zpaq/Portfile

    diff --git a/archivers/zpaq/Portfile b/archivers/zpaq/Portfile
    index 543fa48b132..c5c32fae231 100644
    a b  
    33PortSystem          1.0
    44PortGroup           github 1.0
    55PortGroup           makefile 1.0
     6PortGroup           muniversal 1.1
    67
    78github.setup        zpaq zpaq 7.15
    8 revision            0
     9revision            1
    910checksums           rmd160  a8686308a5ffb9f4168f8afa6562b4c7b703b2c9 \
    1011                    sha256  64280d86cd38ad5ebc1c6415b17eb09ee292078d772176b90e16287687191efe \
    1112                    size    140057
    if {[string match *clang* ${configure.cxx}] && ${configure.cxx_stdlib} ne ""} { 
    4142    configure.ldflags-append -stdlib=${configure.cxx_stdlib}
    4243}
    4344
     45configure.cppflags.arm64    -DNOJIT
     46configure.cppflags.ppc      -DNOJIT
     47configure.cppflags.ppc64    -DNOJIT
     48configure.cppflags.x86_64   -DJUST_TESTING
     49
    4450test.run            yes
    4551test.target         check
    4652

I'm on an x86_64 Mac and building non-universal I get:

--->  Building zpaq
DEBUG: Executing proc-pre-org.macports.build-build-0
DEBUG: Executing org.macports.build (zpaq)
DEBUG: Environment: 
ARCHPREFERENCE='x86_64'
CC='/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/cc/usr/bin/clang'
CC_PRINT_OPTIONS='YES'
CC_PRINT_OPTIONS_FILE='/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/.CC_PRINT_OPTIONS'
CFLAGS='-Os -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk'
CPATH='/opt/local/include'
CPPFLAGS='-I/opt/local/include -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk'
CXX='/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/cxx/usr/bin/clang++'
CXXFLAGS='-Os -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -stdlib=libc++'
DEVELOPER_DIR='/Library/Developer/CommandLineTools'
F90FLAGS='-Os'
FCFLAGS='-Os'
FFLAGS='-Os'
INSTALL='/usr/bin/install -c'
LDFLAGS='-L/opt/local/lib -Wl,-headerpad_max_install_names -stdlib=libc++ -Wl,-syslibroot,/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk'
LIBRARY_PATH='/opt/local/lib'
MACOSX_DEPLOYMENT_TARGET='12.0'
OBJC='/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/objc/usr/bin/clang'
OBJCFLAGS='-Os -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk'
OBJCXX='/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/objcxx/usr/bin/clang++'
OBJCXXFLAGS='-Os -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -stdlib=libc++'
PREFIX='/opt/local'
SDKROOT='/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk'

Why are the -arch flags and my -DJUST_TESTING addition to CPPFLAGS not appearing here in the environment variables? This is where I expect to see them.

Executing:  cd "/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/zpaq-7.15" && /usr/bin/make -j1 -w all PREFIX=/opt/local CC="/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/cc/usr/bin/clang" CXX="/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/cxx/usr/bin/clang++" OBJC="/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/objc/usr/bin/clang" OBJCXX="/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/objcxx/usr/bin/clang++" CXXFLAGS="-Os -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -stdlib=libc++" INSTALL="/usr/bin/install -c" CC+="-arch x86_64" CXXFLAGS+="-arch x86_64" OBJC+="-arch x86_64" OBJCXX+="-arch x86_64" LD+="-arch x86_64" F77+="-m64" F90+="-m64" FC+="-m64" CPP+="-DJUST_TESTING" 
DEBUG: system:  cd "/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/zpaq-7.15" && /usr/bin/make -j1 -w all PREFIX=/opt/local CC="/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/cc/usr/bin/clang" CXX="/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/cxx/usr/bin/clang++" OBJC="/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/objc/usr/bin/clang" OBJCXX="/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/objcxx/usr/bin/clang++" CXXFLAGS="-Os -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -stdlib=libc++" INSTALL="/usr/bin/install -c" CC+="-arch x86_64" CXXFLAGS+="-arch x86_64" OBJC+="-arch x86_64" OBJCXX+="-arch x86_64" LD+="-arch x86_64" F77+="-m64" F90+="-m64" FC+="-m64" CPP+="-DJUST_TESTING" 

Looks like this is where the flags are being appended, in an unusual way, at the end of configure.args, and I don't understand the choice of variables. For example, the -arch flag is appended to CXXFLAGS, but not to CFLAGS nor LDFLAGS. It is appended to CC and LD but that doesn't make a great deal of sense to me. This Makefile doesn't use the LD variable. My -DJUST_TESTING addition is being appended not to CPPFLAGS but to CPP; this Makefile doesn't use the CPP variable.

make: Entering directory `/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/zpaq-7.15'
/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/cxx/usr/bin/clang++ -I/opt/local/include -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -Dunix -Os -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -stdlib=libc++ -arch x86_64 -o zpaq.o -c zpaq.cpp -pthread
/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/cxx/usr/bin/clang++ -I/opt/local/include -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -Dunix -Os -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -stdlib=libc++ -arch x86_64 -o libzpaq.o -c libzpaq.cpp
/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/cxx/usr/bin/clang++ -L/opt/local/lib -Wl,-headerpad_max_install_names -stdlib=libc++ -Wl,-syslibroot,/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -o zpaq zpaq.o libzpaq.o -pthread
pod2man zpaq.pod >zpaq.1
make: Leaving directory `/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/zpaq-7.15'

Note -arch flag missing from the link line. Link succeeded for this non-universal build since x86_64 is the default arch but link fails if I'm trying to build universal:

/opt/local/var/macports/build/_Volumes_Shared_macports-ports_archivers_zpaq/zpaq/work/compwrap/cxx/usr/bin/clang++ -L/opt/local/lib -Wl,-headerpad_max_install_names -stdlib=libc++ -Wl,-syslibroot,/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -o zpaq zpaq.o libzpaq.o -pthread
ld: warning: ignoring file zpaq.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file libzpaq.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [zpaq] Error 1

Looks like the reason why -arch flags are being added for CXXFLAGS is that I listed it in makefile.override. If I add LDFLAGS to makefile.override then -arch flags return for the link line, but that shouldn't be necessary. And I don't want to specify CPPFLAGS in makefile.override because I don't want to override the Makefile's CPPFLAGS.

Change History (2)

comment:1 Changed 11 months ago by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)

Cc: MarcusCalhoun-Lopez removed
Owner: set to MarcusCalhoun-Lopez
Status: newaccepted

comment:2 Changed 11 months ago by mascguy (Christopher Nielsen)

Cc: mascguy added
Note: See TracTickets for help on using tickets.